package py.com.sole.solesys;

import java.io.Serializable;
import java.util.List;
import java.util.Locale;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;
import org.primefaces.event.FlowEvent;
import org.primefaces.event.SelectEvent;

import py.com.sole.dao.DaoFactory;
import py.com.sole.model.Tutoria;

@ManagedBean
@SessionScoped
public class TutoriaBean implements Serializable {

  /**
   *
   */
  private static final long serialVersionUID = 1L;
  private final static Logger logger = Logger.getLogger(TutoriaBean.class);

  @ManagedProperty(value = "#{materiaBean}")
  private MateriaBean materia;
  private List<Tutoria> tutorias;
  private Tutoria tutoriaSelected;
  private String tipoPrecio;
  private Integer precioTutoria;
  private Integer costoTutoria;
  private Tutoria tutoria;
  private boolean bloquearBotones = true;

  @PostConstruct
  private void init() {
    tutorias = DaoFactory.getTutoria().getTutorias();
    precioTutoria = 0;
    costoTutoria = 0;
  }

  public String onFlowProcess(FlowEvent event) {
    return event.getNewStep();
  }

  public void clean() {
    this.tutoriaSelected = null;
    this.materia.setMateriaSelected(null);
    tipoPrecio = null;
    precioTutoria = 0;
    costoTutoria = 0;
    this.setBloquearBotones(true);
  }

  public void saveTutoria() {

    FacesContext context = FacesContext.getCurrentInstance();

    Tutoria t = new Tutoria();
    t.setMateria(this.materia.getMateriaSelected());
    t.setTipoPrecio(tipoPrecio);
    t.setPrecioTutoria(precioTutoria);
    t.setCostoTutoria(costoTutoria);
    t.setActivo(true);

    DaoFactory.getTutoria().addTutoria(t);

    context.addMessage(null, new FacesMessage("Mensaje", "Tutoria "
                                              + t.getTipoPrecio() + " almacenado exitosamente"));

    tutorias = DaoFactory.getTutoria().getTutorias();

    this.clean();
  }

  public void onRowSelect(SelectEvent event) {

    this.tutoriaSelected = (Tutoria) event.getObject();
    this.setTutoria(DaoFactory.getTutoria().getTutoriaById(this.tutoriaSelected.getId()));
    this.materia.setMateriaSelected(tutoria.getMateria());
    tipoPrecio = tutoria.getTipoPrecio();
    precioTutoria = tutoria.getPrecioTutoria();
    costoTutoria = tutoria.getCostoTutoria();

    this.setBloquearBotones(false);
    //RequestContext.getCurrentInstance().update("tutoria-form:pnlGridAddTutoria");
    //RequestContext.getCurrentInstance().update("tutoria-form");

    RequestContext.getCurrentInstance().update("form-edit:pnlGridTutoria");
    RequestContext.getCurrentInstance().update("form-edit");
    RequestContext.getCurrentInstance().update("tutoria-form");

  }

  @SuppressWarnings(value = "all")
  public boolean filterByNombre(Object value, Object filter, Locale locale) {

    String filterText = (filter == null) ? null : filter.toString().trim();

    if (filterText == null || filterText.equals("")) {
      return true;
    }

    if (value == null) {
      return false;
    }

    return ((Comparable<String>) value).compareTo(filterText) > 0;

  }

  public void deleteTutoria() {
    tutoria = DaoFactory.getTutoria().getTutoriaById(this.getTutoriaSelected().getId());
    FacesContext context = FacesContext.getCurrentInstance();

    tutoria.setActivo(false);
    DaoFactory.getTutoria().updateTutoria(tutoria);
    context.addMessage(null, new FacesMessage("Mensaje", "Tutoria "
                                              + " eliminado exitosamente"));

    tutorias = DaoFactory.getTutoria().getTutorias();
    this.clean();
  }

  public void editTutoria() {
    tutoria = DaoFactory.getTutoria().getTutoriaById(this.getTutoriaSelected().getId());
    FacesContext context = FacesContext.getCurrentInstance();

    tutoria.setMateria(this.materia.getMateriaSelected());
    tutoria.setTipoPrecio(tipoPrecio);
    tutoria.setPrecioTutoria(precioTutoria);
    tutoria.setCostoTutoria(costoTutoria);
    tutoria.setActivo(true);

    DaoFactory.getTutoria().updateTutoria(tutoria);
    context.addMessage(null, new FacesMessage("Mensaje", "Tutoria "
                                              + " editado exitosamente"));

    tutorias = DaoFactory.getTutoria().getTutorias();
    this.clean();
  }

  public boolean isBloquearBotones() {
    return bloquearBotones;
  }

  public void setBloquearBotones(boolean bloquearBotones) {
    this.bloquearBotones = bloquearBotones;
  }

  public MateriaBean getMateria() {
    return materia;
  }

  public void setMateria(MateriaBean materia) {
    this.materia = materia;
  }

  public List<Tutoria> getTutorias() {
    return tutorias;
  }

  public void setTutorias(List<Tutoria> tutorias) {
    this.tutorias = tutorias;
  }

  public Tutoria getTutoriaSelected() {
    return tutoriaSelected;
  }

  public void setTutoriaSelected(Tutoria tutoriaSelected) {
    this.tutoriaSelected = tutoriaSelected;
  }

  public String getTipoPrecio() {
    return tipoPrecio;
  }

  public void setTipoPrecio(String tipoPrecio) {
    this.tipoPrecio = tipoPrecio;
  }

  public Integer getPrecioTutoria() {
    return precioTutoria;
  }

  public void setPrecioTutoria(Integer precioTutoria) {
    this.precioTutoria = precioTutoria;
  }

  public Integer getCostoTutoria() {
    return costoTutoria;
  }

  public void setCostoTutoria(Integer costoTutoria) {
    this.costoTutoria = costoTutoria;
  }

  public Tutoria getTutoria() {
    return tutoria;
  }

  public void setTutoria(Tutoria tutoria) {
    this.tutoria = tutoria;
  }

}
